Essentials of Compilation
目次
Preliminaries
本書を通して登場するASTやパターンマッチ、再帰などの技法を紹介し、小さなインタプリタを作成する。
Integers and Variables
整数型の値、加減算、符号反転、括弧、変数束縛を含む小さな言語をx86-64アセンブリ言語にコンパイルする。
Parsing(Python版のみ)
パーサージェネレーターLarkを使った字句解析と構文解析を行う。
Larkに実装されている構文解析アルゴリズムのうち、Earley法とLALR法のふたつを解説する。
Register Allocation
グラフ彩色アルゴリズムによるレジスタ割り当てや生存区間解析に取り組む。
Booleans and Conditionals
自作言語に真偽値や比較演算、条件分岐を組み込む。
Loops and Dataflow Analysis
自作言語にループ構文を組み込み、データフロー解析を発展させる。
Tuples and Garbage Collection
自作言語にタプルとGCを導入する。
Functions
自作言語に関数を導入する。
Lexically Scoped Functions
自作言語の関数にクロージャを実装する。
Dynamic Typing
ここまでの自作言語は項の型が静的に決まるようになっていた。ここでは値に型タグをつける方式に切り替え、Any型を導入する。
Gradual Typing
前章の実装をさらに発展させて、自作言語に漸進的型付けを実装する。
Generics
Appendix
命令選択
レジスタ割り当て
静的型検査
条件制御フロー
変更可能なデータ
ガベージコレクション
手続きと呼び出し規約
第一級の関数とクロージャ変換
動的型付け
高水準最適化(インライン化、定数の畳み込み、コピー伝播など)